package com.dayuanit.dy17.mix.proxy.dynamicproxy;

import com.dayuanit.dy17.mix.proxy.service.impl.PayServiceImpl;
import com.dayuanit.dy17.mix.proxy.service.impl.UserServiceImpl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 代理类的逻辑
 */
public class ServiceStartInvocationHandler implements InvocationHandler {

    //目标类 也就是被代理的类 实例对象
    private Object targetObject;

    public ServiceStartInvocationHandler(Object targetObject) {
        this.targetObject = targetObject;
    }

    /**
     *
     * @param proxy  代理类
     * @param method 被代理的方法
     * @param args 被代理方法的入参  入参可能有多个 也可能木有
     * @return 被代理方法(目标类的方法)执行后的返回值，若目标方法有木有返回值，则返回null
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        //TODO 代理之前要做的业务
        System.out.println("-------server start...-------");

        //TODO 执行目标方法
        Object result = method.invoke(targetObject, args);

        //TODO 代理之后要做的业务

        System.out.println("-------server end-------");

        return result;
    }
}
